package site.wanjiahao.handler.server;

import io.netty.channel.Channel;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import site.wanjiahao.session.GroupSession;
import site.wanjiahao.session.SessionFactory;

@ChannelHandler.Sharable
public class MyChannelInboundCycleHandler extends ChannelInboundHandlerAdapter {

    // 对于客户端正常退出，可以使用此生命周期方法
    @Override
    public void channelInactive(ChannelHandlerContext ctx) {
        closeAfter(ctx);
        System.out.println("客户端正常退出");
    }

    // 对于客户端异常退出，可以使用此生命周期方法
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
        closeAfter(ctx);
        System.out.println("客户端异常退出" + cause.getCause().toString());
    }

    // 客户端关闭的后处理
    private void closeAfter(ChannelHandlerContext ctx) {
        Channel channel = ctx.channel();
        // 解绑客户端对象，移出Session对象
        SessionFactory.getSession().unbind(channel);
        GroupSession groupSession = SessionFactory.getGroupSession();
        String groupName = groupSession.getGroupName(channel);
        if (groupName != null) {
            System.out.println("移出用户组: " + groupName);
            groupSession.quit(groupName, channel);
        }
    }
}
